﻿// 3698. 搬箱子.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <algorithm>

using namespace std;
/*

https://www.acwing.com/problem/content/3701/

华华要给厂里进一批新箱子共 n个，编号为 1到 n
，用一个正整数 ai来表示编号为 i的箱子的高度。

现在华华要按照编号从小到大的顺序选出 m个箱子运到厂房，要确保编号大的箱子比编号小的箱子高。

也就是对于任意的 i<j有 ai<aj，那么 m最大可以是多少呢？

输入格式
第一行是正整数 n，表示 n个箱子。

第二行 a1,a2…an分别表示编号为 i的箱子的高度。

输出格式
输出华华最多可以搬运的箱子个数。

数据范围
1≤n≤500
,
1≤ai≤10000
输入样例：
7
1 7 3 5 9 4 8
输出样例：
4
*/

const int N = 510;
int a[N], dp[N];
int n;



int main()
{
	cin >> n;

	for (int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	int ans = 0;
	for (int i = 1; i <= n; i++) {
		dp[i] = 1;
		for (int j = 1; j < i; j++) {
			if (a[i] > a[j]) {
				dp[i] = max(dp[i], dp[j] + 1);
			}
		}
		ans = max(ans, dp[i]);
	}

	cout << ans << endl;


	return 0;
}

 